package com.menker.app.common;

import android.content.Intent;
import android.os.Build;
import android.text.TextUtils;
import android.widget.LinearLayout;

import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.github.lzyzsd.jsbridge.BridgeWebView;
import com.menker.app.biz.CurrentUser;
import com.menker.app.biz.PageInfo;
import com.menker.app.biz.WebPageInfo;
import com.menker.app.rest.ApiHelper;
import com.menker.app.ui.main.MainActivity;
import com.menker.app.ui.main.MainActivity_;
import com.menker.app.webview.WebViewManager;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;

import java.util.ArrayList;
import java.util.List;


/**
 * @author J.Huang
 * @version 1.0
 */
public abstract class BaseWebViewToolbarFragment extends BaseToolbarFragment {

    protected BridgeWebView mWebView;

    protected LinearLayout mLayoutWebView;    // 不需要下拉刷新
    protected WebViewManager mWebViewManager;

    private String mInitUrl;

    protected void setupUI(final WebPageInfo webPageInfo, ApiHelper apiHelper, CurrentUser currentUser) {

        if (webPageInfo == null) {
            return;
        }

        //        mWebView = new WebView(getActivity());
        mWebView = new BridgeWebView(getActivity());

        List<ToolbarOwner.MenuAction> menuActionList = new ArrayList<>();
//            if (!TextUtils.isEmpty(menuName)) {
//                ToolbarOwner.MenuAction menuAction = new ToolbarOwner.MenuAction(menuName, new Action0() {
//                    @Override
//                    public void call() {
//                    }
//                }, R.drawable.ic_add);
//
//                menuActionList.add(menuAction);
//            }

        PageInfo pageInfo;
        if (webPageInfo.toolbarVisible) {
            pageInfo = new PageInfo(webPageInfo.toolbarTitle,
                    true,
                    webPageInfo.toolbarTitleColor, webPageInfo.toolbarBgColor);
        } else {
            pageInfo = new PageInfo(false);
        }

        super.setupUI(pageInfo, menuActionList);

        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
//            mLayoutWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }

        mWebViewManager = new WebViewManager(this, this, mWebView);
        mWebViewManager.init(apiHelper, currentUser);
        mWebViewManager.loadUrl(webPageInfo.url);

        if (getActivity() instanceof MainActivity) {
            mWebViewManager.setLocationClient(((MainActivity)getActivity()).locationClient);
        }else {
            initLocationInfo();
        }

        mInitUrl = webPageInfo.url;

        if (mRefreshLayout != null) {
            mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
                @Override
                public void onRefresh(RefreshLayout refreshlayout) {
                    refreshlayout.finishRefresh(1000);
                    mWebViewManager.reload();
                }
            });
        }
    }

    private void initLocationInfo() {
        LocationClient locationClient = new LocationClient(getActivity());//声明LocationClient类
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        option.setScanSpan(0);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(false);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(true);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        locationClient.setLocOption(option);

        mWebViewManager.setLocationClient(locationClient);
    }


    @Override
    public void onResume() {
        super.onResume();

        if (mWebViewManager != null) {
            mWebViewManager.resume();
            mWebViewManager.onWebShow();
        }
    }

    @Override
    public void onPause() {
        if (mWebViewManager != null) {
            mWebViewManager.pause();
        }
        super.onPause();
    }

    @Override
    public void onStop() {
        if (mWebViewManager != null) {
            mWebViewManager.stop();
        }
        super.onStop();
    }

    @Override
    public void onDestroy() {
        mToolbar = null;
        mToolbarTitle = null;
        mToolbarOwner = null;

        if (mLayoutWebView != null) {
            mLayoutWebView.removeAllViews();
        }

        // mWebViewManager有this的引用，必须清空
        if (mWebViewManager != null) {
            mWebViewManager.destroy();
            mWebViewManager = null;
        }

        if (mActionBarMenuActionList != null) {
            mActionBarMenuActionList.clear();
        }

        super.onDestroy();
    }

    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);

        if (!hidden) {
            ((MainActivity_) getActivity()).refreshCurrentTabIndex();
            if (mWebView != null && TextUtils.isEmpty(mWebView.getUrl())) {
//                mWebViewManager.loadUrl(mInitUrl);
            }
        }
    }
}
